From aba7c65a487a2bd7f07172c9f1e5f25030fa5006 Mon Sep 17 00:00:00 2001 From: =?utf8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Thu, 23 Nov 2017 17:58:37 +0100 Subject: [PATCH] Added basic meson files --- babl/base/meson.build | 22 ++++ babl/git-version.h.in | 5 + babl/meson.build | 85 +++++++++++++ meson.build | 270 ++++++++++++++++++++++++++++++++++++++++++ meson_options.txt | 6 + 5 files changed, 388 insertions(+) create mode 100644 babl/base/meson.build create mode 100644 babl/git-version.h.in create mode 100644 babl/meson.build create mode 100644 meson.build create mode 100644 meson_options.txt diff --git a/babl/base/meson.build b/babl/base/meson.build new file mode 100644 index 0000000..c49aa78 --- /dev/null +++ b/babl/base/meson.build @@ -0,0 +1,22 @@ +bablBaseInclude = include_directories('.') + +babl_base_sources = [ + 'babl-base.c', + 'formats.c', + 'model-gray.c', + 'model-rgb.c', + 'model-ycbcr.c', + 'pow-24.c', + 'type-float.c', + 'type-half.c', + 'type-u15.c', + 'type-u16.c', + 'type-u32.c', + 'type-u8.c', +] + +babl_base = static_library('babl_base', + babl_base_sources, + include_directories: [ rootInclude, bablInclude, ], + dependencies: [ math, ], +) diff --git a/babl/git-version.h.in b/babl/git-version.h.in new file mode 100644 index 0000000..e780e4f --- /dev/null +++ b/babl/git-version.h.in @@ -0,0 +1,5 @@ +#pragma once + +#define BABL_GIT_VERSION "@BABL_GIT_VERSION@" +#define BABL_GIT_VERSION_ABBREV "@BABL_GIT_VERSION_ABBREV@" +#define BABL_GIT_LAST_COMMIT_YEAR "@BABL_GIT_LAST_COMMIT_YEAR@" diff --git a/babl/meson.build b/babl/meson.build new file mode 100644 index 0000000..59cb88c --- /dev/null +++ b/babl/meson.build @@ -0,0 +1,85 @@ +bablInclude = include_directories('.') +subdir('base') + +babl_version_h = configure_file( + input : 'babl-version.h.in', + output: 'babl-version.h', + configuration: conf, +) + +gitversion_h1 = vcs_tag( + input : 'git-version.h.in', + output: 'git-version.h.in.1', + command: [ 'git', 'describe', '--always', ], + replace_string: '@BABL_GIT_VERSION@', + fallback: '', +) +gitversion_h2 = vcs_tag( + input : gitversion_h1, + output: 'git-version.h.in.2', + command: [ 'git', 'rev-parse', '--short', 'HEAD', ], + replace_string: '@BABL_GIT_VERSION_ABBREV@', + fallback: '', +) +gitversion_h = vcs_tag( + input : gitversion_h2, + output: 'git-version.h', + command: [ 'git', 'log', '-n1', '--date=format:%Y', '--pretty=%cd', ], + replace_string: '@BABL_GIT_LAST_COMMIT_YEAR@', + fallback: '', +) + +babl_sources = [ + 'babl-cache.c', + 'babl-component.c', + 'babl-conversion.c', + 'babl-core.c', + 'babl-cpuaccel.c', + 'babl-db.c', + 'babl-extension.c', + 'babl-fish-path.c', + 'babl-fish-reference.c', + 'babl-fish-simple.c', + 'babl-fish.c', + 'babl-format.c', + 'babl-hash-table.c', + 'babl-icc.c', + 'babl-image.c', + 'babl-internal.c', + 'babl-introspect.c', + 'babl-list.c', + 'babl-memory.c', + 'babl-model.c', + 'babl-mutex.c', + 'babl-palette.c', + 'babl-polynomial.c', + 'babl-ref-pixels.c', + 'babl-sampling.c', + 'babl-sanity.c', + 'babl-space.c', + 'babl-trc.c', + 'babl-type.c', + 'babl-util.c', + 'babl-version.c', + 'babl.c', + babl_version_h, + gitversion_h, +] + +babl_headers = [ + 'babl-introspect.h', + 'babl-macros.h', + 'babl-types.h', + 'babl.h', +] + +install_headers(babl_headers, + subdir: join_paths(lib_name, 'babl') +) + +babl = library('babl', + babl_sources, + include_directories: [ rootInclude, bablBaseInclude], + c_args: [ '-DLIBDIR="' + get_option('libdir') + '"', ], + cpp_args: [ '-DLIBDIR="' + get_option('libdir') + '"', ], +) diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..68aac9c --- /dev/null +++ b/meson.build @@ -0,0 +1,270 @@ +# Meson build file + +# http://bugzilla.gnome.org/enter_bug.cgi?product=GIMP + +# Making releases on the stable branch: +# BABL_MICRO_VERSION += 1; +# BABL_INTERFACE_AGE += 1; +# BABL_BINARY_AGE += 1; +# if any functions have been added, +# set BABL_INTERFACE_AGE to 0. +# if backwards compatibility has been broken, +# set BABL_BINARY_AGE _and_ BABL_INTERFACE_AGE to 0. + +project('babl', ['c', 'cpp'], version : '0.1.39', + meson_version : '>=0.40.0', + default_options : [ + 'sysconfdir=/etc', + 'localstatedir=/var', + 'sharedstatedir=/var/lib' + ], +) + +conf = configuration_data() + +pkgconfig = import('pkgconfig') +i18n = import('i18n') +gnome = import('gnome') + +cc = meson.get_compiler('c') +cxx = meson.get_compiler('cpp') +prefix = get_option('prefix') +buildtype = get_option('buildtype') + +################################################################################ +# Projects infos + +version = meson.project_version() +array_version = version.split('.') +major_version = array_version[0].to_int() +minor_version = array_version[1].to_int() +micro_version = array_version[2].to_int() + +interface_age = 1 +binary_age = 100 * minor_version + micro_version + +lt_current = 100 * minor_version + micro_version - interface_age +lt_revision = interface_age +lt_age = binary_age - interface_age +lt_current_minus_age = lt_current - lt_age + +api_version = '@0@.@1@'.format(major_version, minor_version) +lib_version = '@0@:@1@:@2@'.format(lt_current, lt_revision, lt_age) +lib_name = meson.project_name() + '-' + meson.project_version() + +stability_version_number = (major_version != 0 ? minor_version : micro_version) +stable = (stability_version_number % 2 == 0) + +conf.set10('BABL_UNSTABLE', not stable) + +conf.set_quoted('BABL_MAJOR_VERSION', '@0@'.format(major_version)) +conf.set_quoted('BABL_MINOR_VERSION', '@0@'.format(minor_version)) +conf.set_quoted('BABL_MICRO_VERSION', '@0@'.format(micro_version)) +conf.set_quoted('BABL_INTERFACE_AGE', '@0@'.format(interface_age)) +conf.set_quoted('BABL_BINARY_AGE', '@0@'.format(binary_age)) +conf.set_quoted('BABL_VERSION', '@0@'.format(version)) +conf.set_quoted('BABL_REAL_VERSION', '@0@'.format(version)) +conf.set_quoted('BABL_API_VERSION', '@0@'.format(api_version)) +conf.set_quoted('BABL_RELEASE', '@0@'.format(api_version)) +conf.set_quoted('BABL_LIBRARY_VERSION', '@0@'.format(lib_version)) +conf.set_quoted('BABL_CURRENT_MINUS_AGE','@0@'.format(lt_current_minus_age)) +conf.set_quoted('BABL_LIBRARY', '@0@'.format(lib_name)) + +conf.set_quoted('WEBSITE_HOST', 'pippin.gimp.org') +conf.set_quoted('WEBSITE_LOCATION', 'public_html/babl') + +################################################################################ +# Host system detection + +host_cpu = host_machine.cpu() +message('Architecture: ' + host_cpu) + +if host_cpu.startswith('i') and host_cpu.endswith('86') + have_x86 = true + conf.set10('ARCH_X86', true) +elif host_cpu == 'x86_64' + have_x86 = true + conf.set10('ARCH_X86', true) + conf.set10('ARCH_X86_64', true) +elif host_cpu == 'ppc' or host_cpu == 'powerpc' + have_ppc = true + conf.set10('ARCH_PPC', true) +elif host_cpu == 'ppc64' or host_cpu == 'powerpc64' + have_ppc = true + conf.set10('ARCH_PPC', true) + conf.set10('ARCH_PPC64', true) +else + error('Unknown host architecture') +endif + + +host_os = host_machine.system() +message('Host os: ' + host_os) + +platform_win32 = (host_os.startswith('mingw') or host_os.startswith('cygwin')) +# Is this native win32 +os_win32 = host_os.startswith('mingw') + +platform_osx = host_os.startswith('darwin') +if platform_osx + if cc.get_id() != 'clang' or cxx.get_id() != 'clang' + error('You should use CLang++ on OSx.') + endif +endif + +platform_android = host_os.contains('android') + +path_sep = ( os_win32 ? ';' : ':' ) +dirs_sep = ( os_win32 ? '\\' : '/' ) +conf.set('BABL_PATH_SEPARATOR', path_sep) +conf.set('BABL_DIR_SEPARATOR', dirs_sep) + +################################################################################ +# Extra warnings + +extra_warnings_list = [ + '-Wdeclaration-after-statement', + '-Winit-self', + '-Wmissing-declarations', + '-Wmissing-prototypes', + '-Wold-style-definition', + '-Wpointer-arith', +] +extra_warnings = [] +foreach warning : extra_warnings_list + if cc.has_argument(warning) + extra_warnings += warning + endif +endforeach + + +################################################################################ +# Check for compiler CPU extensions + +have_tls_run = cc.run('int main() { static __thread char buf[1024]; return 0; }') +have_tls = (have_tls_run.compiled() and have_tls_run.returncode() == 0) + +has_ssem = cc.has_argument('-mfpmath=sse') +if has_ssem + add_project_arguments('-mfpmath=sse', + language: ['c', 'cxx']) +endif + +has_mmx = cc.has_argument('-mmmx') and get_option('enable-mmx') +if has_mmx + add_project_arguments( '-mmmx', + language: ['c', 'cxx']) +endif + +has_sse = cc.has_argument('-msse') and get_option('enable-sse') +if has_sse + add_project_arguments( '-msse', + language: ['c', 'cxx']) +endif + +has_sse2 = cc.has_argument('-msse2') and get_option('enable-sse2') +if has_sse2 + add_project_arguments( '-msse2', + language: ['c', 'cxx']) +endif + +has_sse41= cc.has_argument('-msse4.1') and get_option('enable-sse4_1') +if has_sse41 + add_project_arguments( '-msse4.1', + language: ['c', 'cxx']) +endif + +had_f16c= cc.has_argument('-mf16c') and get_option('enable-f16c') +if had_f16c + add_project_arguments( '-mf16c', + language: ['c', 'cxx']) +endif + +have_dlfcn_h = cc.has_header('dlfcn.h') +have_dl_h = cc.has_header('dl.h') +if not (have_dlfcn_h or have_dl_h) + error('Header dlfcn.h or dl.h not provided. Please provide one of them.') +endif + +conf.set10('HAVE_DLFCN_H', have_dlfcn_h) +conf.set10('HAVE_DL_H', have_dl_h) + + +shared_lib_ext = (platform_win32 ? '.dll' : '.so') +conf.set_quoted('SHREXT', shared_lib_ext) + +################################################################################ +# Utilities + +rsvg_convert = find_program('rsvg-convert', required: false) +w3m = find_program('w3m', required: false) + + + +################################################################################ +# Dependencies + +if os_win32 + math = [] + thread = [] +else + math = cc.find_library('m') + thread = cc.find_library('pthread') +endif + +if platform_android + log = cc.find_library('log') +else + log = [] +endif + + +pkgconfig.generate(filebase: 'babl', + name: 'babl', + description: 'Dynamic, any to any, pixel format conversion library', + version: meson.project_version(), + libraries: [ + '-L${libdir}', + '-l' + lib_name, + ], + libraries_private: [ + '-lm', '-lpthread', + ], + subdirs: [ + lib_name, + ], +) + +configure_file( + output: 'config.h', + configuration: conf +) + + +################################################################################ +# Subdirs + +rootInclude = include_directories('.') + +subdir('babl') +# subdir('extensions') +# subdir('tests') +# subdir('tools') +if get_option('with-docs') + # subdir('docs') +endif + + +if w3m.found() + custom_target('README', + input : [ join_paths('docs', 'index.html'), ] , + output: [ 'README' ] , + command: [ + w3m, + '-cols', '72', + '-dump', + '@INPUT@', + ], + capture: true, + ) +endif diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..51e5fdc --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,6 @@ +option('enable-mmx', type: 'boolean', value: true, description: 'enable MMX support') +option('enable-sse', type: 'boolean', value: true, description: 'enable SSE support') +option('enable-sse2', type: 'boolean', value: true, description: 'enable SSE2 support') +option('enable-sse4_1', type: 'boolean', value: true, description: 'enable SSE4.1 support') +option('enable-f16c', type: 'boolean', value: true, description: 'enable hardware half-float support') +option('with-docs', type: 'boolean', value: true) -- 2.30.2